home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Graphics / Multimedia / Movie3.0 / Source / xanim / xanim.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-07-01  |  17.0 KB  |  715 lines

  1.  
  2. /*
  3.  * xanim.h
  4.  *
  5.  * Copyright (C) 1990,1991,1992,1993,1994 by Mark Podlipec. 
  6.  * All rights reserved.
  7.  *
  8.  * This software may be freely copied, modified and redistributed without
  9.  * fee for non-commerical purposes provided that this copyright notice is
  10.  * preserved intact on all copies and modified copies.
  11.  *
  12.  * There is no warranty or other guarantee of fitness of this software.
  13.  * It is provided solely "as is". The author(s) disclaim(s) all
  14.  * responsibility and liability with respect to this software's usage
  15.  * or its effect upon hardware or computer systems.
  16.  *
  17.  */
  18.  
  19. #define XWIN 0
  20. #define MAIN 0
  21. #define SETFILE 0
  22.  
  23. #if XWIN
  24. #include <Xos.h>
  25. #endif
  26. #include <sys/types.h>
  27. #ifndef VMS
  28. #include <sys/param.h>
  29. #include <memory.h>
  30. #include <unistd.h>
  31. #else
  32. #include <unixio.h>
  33. #endif
  34. #include <stdio.h>
  35. #include <stdlib.h>
  36. #if XWIN
  37. #include <Xlib.h>
  38. #endif
  39. #include "xanim_config.h"
  40.  
  41. #ifdef XA_XTPOINTER
  42. typedef void* XtPointer
  43. #endif
  44.  
  45. /*
  46.  * MSDOS needs to be specifically told to open file for binary reading.
  47.  * For VMS systems, specify "Stream_LF" mode for VAX C.
  48.  */
  49. #ifdef MSDOS
  50. #define XA_OPEN_MODE "rb"
  51. #else
  52. #ifdef VMS
  53. #define XA_OPEN_MODE "r","ctx=stm"
  54. #else
  55. #define XA_OPEN_MODE "r"
  56. #endif
  57. #endif
  58.  
  59. #define LONG int
  60. #define ULONG unsigned int
  61. #define BYTE char
  62. #define UBYTE unsigned char
  63. #define SHORT short
  64. #define USHORT unsigned short
  65. #define WORD short int
  66. #define UWORD unsigned short int
  67.  
  68. #undef TRUE
  69. #undef FALSE
  70. #define TRUE 1
  71. #define FALSE 0
  72. #define XA_NOFILE 2
  73.  
  74.  
  75. #define XA_MIN(x,y)   ( ((x)>(y))?(y):(x) )
  76. #define XA_MAX(x,y)   ( ((x)>(y))?(x):(y) )
  77.  
  78. /* Read xanim.readme at the end for more info on this line
  79. */
  80. #ifndef HZ
  81. #define HZ 60
  82. #endif
  83.  
  84. #define MS_PER_60HZ 17
  85.  
  86. #if !XWIN
  87. #include "xsim.h"
  88. #endif
  89.  
  90. /* X11 variables */
  91.  
  92. #define XA_GRAYSCALE    0x06
  93. #define XA_STATICGRAY    0x03
  94. #define XA_PSEUDOCOLOR    0x14
  95. #define XA_STATICCOLOR    0x11
  96. #define XA_DIRECTCOLOR    0x18
  97. #define XA_TRUECOLOR    0x19
  98. #define XA_MONOCHROME    0x00
  99.  
  100. #define XA_X11_STATIC    0x01
  101. #define XA_X11_GRAY    0x02
  102. #define XA_X11_CMAP    0x04
  103. #define XA_X11_TRUE    0x08
  104. #define XA_X11_COLOR    0x10
  105.  
  106. extern LONG x11_depth;
  107. extern LONG x11_class;
  108. extern LONG x11_bytes_pixel;
  109. extern LONG x11_bits_per_pixel;
  110. extern LONG x11_bitmap_pad;
  111. extern LONG x11_bitmap_unit;
  112. extern LONG x11_bit_order;
  113. extern LONG x11_byte_order;
  114. extern LONG x11_pack_flag;
  115. extern LONG x11_cmap_flag;
  116. extern LONG x11_cmap_size;
  117. extern LONG x11_disp_bits;
  118. extern LONG x11_cmap_type;
  119. extern LONG x11_depth_mask;
  120. extern LONG x11_display_type;
  121. extern LONG x11_red_mask;
  122. extern LONG x11_green_mask;
  123. extern LONG x11_blue_mask;
  124. extern LONG x11_red_shift;
  125. extern LONG x11_green_shift;
  126. extern LONG x11_blue_shift;
  127. extern LONG x11_red_bits;
  128. extern LONG x11_green_bits;
  129. extern LONG x11_blue_bits;
  130. extern LONG x11_black;
  131. extern LONG x11_white;
  132. extern LONG x11_verbose_flag;
  133. extern ULONG x11_kludge_1;
  134.  
  135. #define X11_MSB  1
  136. #define X11_LSB  0
  137.  
  138. extern LONG xa_anim_holdoff;
  139. extern LONG xa_anim_status;
  140.  
  141. /*------*/
  142. #define XA_NEXT_MASK    0x01
  143. #define XA_STOP_MASK    0x02
  144. #define XA_STEP_MASK    0x04
  145. #define XA_RUN_MASK    0x08
  146. #define XA_ISTP_MASK    0x10
  147. #define XA_FILE_MASK    0x20
  148. #define XA_CLEAR_MASK    0x01
  149. #define XA_BEGIN_MASK    0x01
  150. /*------*/
  151. #define XA_UNSTARTED   0x00
  152. #define XA_BEGINNING   0x80
  153. #define XA_STOP_PREV   0x02
  154. #define XA_STOP_NEXT   0x03
  155. #define XA_STEP_PREV   0x04
  156. #define XA_STEP_NEXT   0x05
  157. #define XA_RUN_PREV    0x08
  158. #define XA_RUN_NEXT    0x09
  159. #define XA_ISTP_PREV   0x14
  160. #define XA_ISTP_NEXT   0x15
  161. #define XA_FILE_PREV   0x24
  162. #define XA_FILE_NEXT   0x25
  163.  
  164. #define XA_SHOW_NORM   0
  165. #define XA_SHOW_SKIP   1
  166.  
  167. #define NOFILE_ANIM   0xffff
  168. #define UNKNOWN_ANIM  0
  169. #define IFF_ANIM      1
  170. #define FLI_ANIM      2
  171. #define GIF_ANIM      3
  172. #define TXT_ANIM      4
  173. #define FADE_ANIM     5
  174. #define DL_ANIM       6
  175. #define JPG_ANIM      7
  176. #define PFX_ANIM      8
  177. #define SET_ANIM      9
  178. #define RLE_ANIM     10
  179. #define AVI_ANIM     11
  180. #define QT_ANIM      12
  181. #define MPG_ANIM     13
  182.  
  183. typedef struct
  184. {
  185.   USHORT red,green,blue,gray;
  186. } ColorReg;
  187.  
  188. typedef struct XA_ACTION_STRUCT
  189. {
  190.  LONG type;        /* type of action */
  191.  LONG cmap_rev;          /* rev of cmap */
  192.  UBYTE *data;        /* data ptr */
  193.  struct XA_ACTION_STRUCT *next;
  194.  struct XA_CHDR_STRUCT *chdr;
  195.  ColorReg *h_cmap;    /* For IFF HAM images */
  196.  ULONG *map;
  197.  struct XA_ACTION_STRUCT *next_same_chdr; /*ptr to next action with same cmap*/
  198. } XA_ACTION;
  199.  
  200. typedef struct XA_CHDR_STRUCT
  201. {
  202.  LONG rev;
  203.  ColorReg *cmap;
  204.  ULONG csize,coff;
  205.  ULONG *map;
  206.  ULONG msize,moff;
  207.  struct XA_CHDR_STRUCT *next;
  208.  XA_ACTION *acts;
  209.  struct XA_CHDR_STRUCT *new_chdr;
  210. } XA_CHDR;
  211.  
  212. typedef struct
  213. {
  214.  ULONG csize,coff;
  215.  UBYTE data[4];
  216. } ACT_CMAP_HDR;
  217.  
  218. typedef struct XA_FRAME_STRUCT
  219. {
  220.   XA_ACTION *act;    /* ptr to relevant Action */
  221.   LONG time;        /* # of milliseconds */
  222.   LONG timelo;        /* higher precision time */
  223. } XA_FRAME;
  224.  
  225. typedef struct
  226. {
  227.   ULONG count;    /* number of loops */
  228.   LONG cnt_var;   /* var to keep track of loops */
  229.   ULONG end_frame; /* last frame of loop */
  230. } ACT_BEG_LP_HDR;
  231.  
  232. typedef struct ACT_END_LP_STRUCT
  233. {
  234.   ULONG *count;       /* points back to beg_lp->count */
  235.   LONG *cnt_var;      /* points back to beg_lp->cnt_var */
  236.   ULONG begin_frame;  /* first frame of loop */
  237.   ULONG *end_frame;   /* points back to beg_lp->end_frame */
  238.   XA_ACTION *prev_end_act; /* used to nest loops during creation */
  239. } ACT_END_LP_HDR;
  240.  
  241. /** AUDIO SECTION ************************/
  242.  
  243. #ifdef XA_SPARC_AUDIO
  244. #define XA_AUDIO 1
  245. #endif
  246. #ifdef XA_LINUX_AUDIO
  247. #define XA_AUDIO 1
  248. #endif
  249. #ifdef XA_SGI_AUDIO
  250. #define XA_AUDIO 1
  251. #endif
  252.  
  253.  
  254. #define XA_AUDIO_STEREO_MSK    0x000001
  255. #define XA_AUDIO_BPS_2_MSK    0x000002
  256. #define XA_AUDIO_BIGEND_MSK    0x000004
  257. #define XA_AUDIO_INVALID    0x000000
  258. #define XA_AUDIO_LINEAR        0x000010
  259. #define XA_AUDIO_SIGNED        0x000020
  260. #define XA_AUDIO_SUN_AU        0x000030
  261. #define XA_AUDIO_ADPCM        0x000040
  262. #define XA_AUDIO_TYPE_MASK      0xfffff0
  263.  
  264. /*NOTES: 
  265.  * last ending is [1|2](BPS),[M|S](Mono/Stereo),[B|L](big/little endian)
  266.  */
  267.    /* 8 bit LINUX */
  268. #define XA_AUDIO_LINEAR_1M    0x000010
  269. #define XA_AUDIO_SIGNED_1M    0x000020
  270. #define XA_AUDIO_LINEAR_1S    0x000011
  271. #define XA_AUDIO_SIGNED_1S    0x000021
  272.    /* 16 bit Sparc 10 DBRI, SGI Indigo */
  273. #define XA_AUDIO_SIGNED_2MB    0x000026
  274.    /* 16 bit LINUX */
  275. #define XA_AUDIO_LINEAR_2ML    0x000012
  276.  
  277. #define XA_AUDIO_SIGNED_2ML    0x000022
  278. #define XA_AUDIO_LINEAR_2MB    0x000016
  279.  
  280. #define XA_AUDIO_LINEAR_2SB    0x000017
  281. #define XA_AUDIO_LINEAR_2SL    0x000013
  282. #define XA_AUDIO_SIGNED_2SB    0x000027
  283. #define XA_AUDIO_SIGNED_2SL    0x000023
  284. #define XA_AUDIO_ADPCM_M    0x000040
  285.  
  286. #define XA_AUDIO_FILE_FLAG   0x0001
  287.  
  288. typedef struct XA_SND_STRUCT
  289. {
  290.   ULONG type;        /* type, chans, bps, */
  291.   ULONG flag;        /* flags */
  292.   ULONG fpos;        /* starting file position */
  293.   ULONG ifreq;        /* input sample freq */
  294.   ULONG hfreq;        /* closest hardware freq */
  295.   ULONG inc;        /* inc for i to h converstion << 24 */
  296.   ULONG ilen;        /* total size in bytes*/
  297.   ULONG inc_cnt;    /* dynamic var for freq conv */
  298.   ULONG bit_cnt;    /* dynamic var for partial bytes */
  299.   ULONG len_cnt;    /* dynamic var for length */
  300.   ULONG (*delta)();    /* conversion routine */
  301.   ULONG ch_time;    /* chunk time */
  302.   ULONG ch_timelo;
  303.   ULONG ch_size;    /* size of chunk */
  304.   ULONG spec;        /* used by decoder */
  305.   UBYTE *snd;        /* sound if present */
  306.   struct XA_SND_STRUCT *next;
  307. } XA_SND;
  308.  
  309.  
  310. typedef struct XA_PAUSE_STRUCT
  311. {
  312.   ULONG frame;
  313.   struct XA_PAUSE_STRUCT *next;
  314. } XA_PAUSE;
  315.  
  316. typedef struct XA_ANIM_HDR_STRUCT
  317. {
  318.   LONG file_num;
  319.   LONG anim_type;    /* animation type */
  320.   LONG imagex;        /* width */
  321.   LONG imagey;        /* height */
  322.   LONG imagec;        /* number of colors */
  323.   LONG imaged;        /* depth in planes */
  324.   LONG dispx;        /* display width */
  325.   LONG dispy;        /* display height */
  326.   LONG buffx;        /* buffered width */
  327.   LONG buffy;        /* buffered height */
  328.   LONG anim_flags;
  329.   LONG loop_num;    /* number of times to loop animation */
  330.   LONG loop_frame;    /* index of loop frame */
  331.   LONG last_frame;    /* index of last frame */
  332.   char *name;        /* name of anim */
  333.   char *fname;        /* name of anim data file */
  334. /* char *fsndname;    eventually have separate sound file name */
  335.   LONG max_fsize;    /* Largest codec size */
  336.   XA_FRAME *frame_lst;    /* array of Frames making up the animation */
  337.   XA_ACTION *acts;    /* actions associated with this animation */
  338.   XA_SND *first_snd;    /* ptr to first sound chunk */
  339.   XA_SND *last_snd;    /* ptr to last sound chunk */
  340.   XA_PAUSE *pause_lst;    /* pause list */
  341.   void (*init_vid)();    /* routine to init video */
  342.   void (*init_aud)();    /* routine to init audio */
  343.   struct XA_ANIM_HDR_STRUCT *next_file;
  344.   struct XA_ANIM_HDR_STRUCT *prev_file;
  345. } XA_ANIM_HDR;
  346.  
  347. #define ANIM_HAM    0x00000009
  348. #define ANIM_HAM6    0x00000001
  349. #define ANIM_LACE    0x00000002
  350. #define ANIM_CYCLE    0x00000004
  351. #define ANIM_HAM8    0x00000008
  352. #define ANIM_PIXMAP    0x00000100
  353. #define ANIM_PING    0x00010000
  354. #define ANIM_NOLOOP    0x00020000
  355. /* single buffered, x11_bytes_pixel */
  356. #define ANIM_SNG_BUF    0x01000000
  357. /* double buffered, 1 byte per pixel */
  358. #define ANIM_DBL_BUF    0x02000000
  359. #define ANIM_3RD_BUF    0x04000000
  360. /* open anim_hdr->fname when starting anim */
  361. #define ANIM_USE_FILE    0x08000000
  362.  
  363. typedef struct
  364. {
  365.  LONG imagex;
  366.  LONG imagey;
  367.  LONG xoff;
  368.  LONG yoff;
  369. } SIZE_HDR;
  370.  
  371. typedef struct
  372.  LONG xpos;
  373.  LONG ypos;
  374.  LONG xsize;
  375.  LONG ysize;
  376.  XImage *image;
  377.  UBYTE *clip;
  378. } ACT_IMAGE_HDR;
  379.  
  380. typedef struct
  381.  LONG xpos;
  382.  LONG ypos;
  383.  LONG xsize;
  384.  LONG ysize;
  385.  Pixmap pixmap;
  386.  Pixmap clip;
  387. } ACT_PIXMAP_HDR;
  388.  
  389. typedef struct
  390.   ULONG (*delta)();
  391.   ULONG flags;
  392.   ULONG xpos,ypos;
  393.   ULONG xsize,ysize;
  394.   ULONG special;
  395.   ULONG extra;
  396.   ULONG fpos;
  397.   ULONG fsize;
  398.   UBYTE data[4];
  399. } ACT_DLTA_HDR;
  400.  
  401. /* ACT_DLTA_HDR Flag Values */
  402. #define ACT_SNGL_BUF    0x0100   /* delta is from sngl buffer anim */
  403. #define ACT_DBL_BUF     0x0200   /* delta is from sngl buffer anim */
  404. #define ACT_3RD_BUF     0x0400   /* needs 3rd buffer for HAM or Dither */
  405. #define DLTA_DATA    0x1000   /* delta data is present */
  406.  
  407. /* DELTA Return VALUES */
  408. #define ACT_DLTA_NORM   0x00000000   /* nothing special */
  409. #define ACT_DLTA_BODY   0x00000001   /* IFF BODY - used for dbl buffer */
  410. #define ACT_DLTA_XOR    0x00000002   /* delta work in both directions */
  411. #define ACT_DLTA_NOP    0x00000004   /* delta didn't change anything */
  412. #define ACT_DLTA_MAPD   0x00000008   /* delta was able to map image */
  413. #define ACT_DLTA_BAD    0x80000000   /* uninitialize value if needed */
  414.  
  415.  
  416. typedef struct STRUCT_ACT_SETTER_HDR
  417.  XA_ACTION *work;
  418.  LONG xback,yback;
  419.  LONG xpback,ypback; 
  420.  XA_ACTION *back;
  421.  LONG xface,yface;
  422.  LONG xpface,ypface;
  423.  LONG depth;
  424.  XA_ACTION *face;
  425.  struct STRUCT_ACT_SETTER_HDR *next;
  426. } ACT_SETTER_HDR;
  427.  
  428. typedef struct
  429.   LONG xpos;
  430.   LONG ypos;
  431.   LONG xsize;
  432.   LONG ysize;
  433.   LONG psize;
  434.   UBYTE *clip;
  435.   UBYTE *data; 
  436. } ACT_MAPPED_HDR;
  437.  
  438. typedef struct
  439.   LONG xpos;
  440.   LONG ypos;
  441.   LONG xsize;
  442.   LONG ysize;
  443.   LONG psize;
  444.   LONG rbits;
  445.   LONG gbits;
  446.   LONG bbits;
  447.   UBYTE *clip;
  448.   UBYTE *data; 
  449. } ACT_TRUE_HDR;
  450.  
  451. typedef struct
  452.   LONG xpos;
  453.   LONG ypos;
  454.   LONG xsize;
  455.   LONG ysize;
  456.   LONG pk_size;
  457.   UBYTE *clip;
  458.   UBYTE data[4]; 
  459. } ACT_PACKED_HDR;
  460.  
  461. typedef struct
  462.  LONG xpos;
  463.  LONG ypos;
  464.  LONG xsize;
  465.  LONG ysize;
  466.  XImage *image;
  467.  UBYTE *clip_ptr;
  468. } ACT_CLIP_HDR;
  469.  
  470. #define ACT_NOP        0x0000
  471. #define ACT_DELAY    0x0001
  472. #define ACT_IMAGE    0x0002
  473. #define ACT_CMAP    0x0003
  474. #define ACT_SIZE    0x0004
  475. #define ACT_FADE    0x0005
  476. #define ACT_CLIP    0x0006
  477. #define ACT_PIXMAP    0x0007
  478. #define ACT_SETTER    0x0008
  479. #define ACT_RAW        0x0009
  480. #define ACT_PACKED    0x0010
  481. #define ACT_DISP    0x0011
  482. #define ACT_MAPPED    0x0012
  483. #define ACT_TRUE    0x0013
  484. #define ACT_PIXMAPS    0x0014
  485. #define ACT_IMAGES    0x0015
  486. #define ACT_CYCLE    0x0016
  487. #define ACT_DELTA    0x0017
  488. #define ACT_BEG_LP    0x0100
  489. #define ACT_END_LP    0x0101
  490. #define ACT_JMP2END    0x0102
  491.  
  492. /* flags */
  493. extern LONG xa_verbose;
  494. extern LONG xa_debug;
  495. extern LONG xa_jiffy_flag;
  496. extern LONG xa_buffer_flag;
  497. extern LONG xa_file_flag;
  498. extern LONG xa_optimize_flag;
  499. extern LONG xa_use_depth_flag;
  500.  
  501. #define DEBUG_LEVEL1   if (xa_debug >= 1) 
  502. #define DEBUG_LEVEL2   if (xa_debug >= 2) 
  503. #define DEBUG_LEVEL3   if (xa_debug >= 3) 
  504. #define DEBUG_LEVEL4   if (xa_debug >= 4) 
  505. #define DEBUG_LEVEL5   if (xa_debug >= 5) 
  506.  
  507. #define XA_CMAP_SIZE 256
  508. #define XA_HMAP_SIZE  64
  509. #define XA_HMAP6_SIZE 16
  510. #define XA_HMAP8_SIZE 64
  511.  
  512. /* CMAP function flags for ACT_Setup_CMAP */
  513. #define CMAP_DIRECT        0x000000
  514. #define CMAP_ALLOW_REMAP    0x000001
  515.  
  516.  
  517. #define CMAP_SCALE4 4369
  518. #define CMAP_SCALE5 2114
  519. #define CMAP_SCALE6 1040
  520. #define CMAP_SCALE8  257
  521. #define CMAP_SCALE9  128
  522. #define CMAP_SCALE10  64
  523. #define CMAP_SCALE11  32
  524. #define CMAP_SCALE13   8
  525. extern ULONG cmap_scale[17];
  526. extern LONG cmap_true_to_332;
  527. extern LONG cmap_true_to_gray;
  528. extern LONG cmap_true_to_1st;
  529. extern LONG cmap_true_to_all;
  530. extern LONG cmap_true_map_flag;
  531. extern LONG cmap_dither_type;
  532.  
  533. extern ULONG cmap_sample_cnt;  /* how many times to sample colors for +CF4 */
  534. extern ULONG cmap_color_func;
  535. extern LONG cmap_luma_sort;
  536. extern LONG cmap_map_to_1st_flag;
  537. extern LONG cmap_play_nice;
  538. extern XA_CHDR *xa_chdr_start;
  539. extern XA_CHDR *xa_chdr_cur;
  540. extern XA_CHDR *xa_chdr_now;
  541. extern ColorReg *xa_cmap;
  542. extern ULONG xa_cmap_size;
  543. extern ULONG xa_cmap_off;
  544. extern LONG cmap_median_type;
  545. extern SHORT cmap_floyd_error;
  546. extern LONG cmap_map_to_one_flag;
  547. extern LONG pod_max_colors;
  548. extern LONG cmap_hist_flag;
  549. extern LONG cmap_median_bits;
  550. extern ULONG cmap_cache_size;
  551. extern ULONG cmap_cache_bits;
  552. extern ULONG cmap_cache_rmask;
  553. extern ULONG cmap_cache_gmask;
  554. extern ULONG cmap_cache_bmask;
  555. extern USHORT *cmap_cache;
  556. extern XA_CHDR *cmap_cache_chdr;
  557.  
  558. extern ULONG xa_gamma_flag;
  559. extern USHORT xa_gamma_adj[];
  560.  
  561.  
  562. extern ULONG xa_r_shift,xa_g_shift,xa_b_shift;
  563. extern ULONG xa_r_mask,xa_g_mask,xa_b_mask;
  564. extern ULONG xa_gray_bits,xa_gray_shift;
  565.  
  566. #define XA_HAM_MAP_INVALID 0xffffffff
  567. #define XA_HAM6_CACHE_SIZE   4096
  568. #define XA_HAM8_CACHE_SIZE 262144
  569.  
  570. typedef struct
  571. {
  572.  ULONG rate;    /* rate at which to cycle colors in milliseconds */
  573.  ULONG flags;   /* flags */
  574.  ULONG size;    /* size of color array */
  575.  ULONG curpos;  /* curpos in array */
  576.  UBYTE data[4];  /* array of cmap pixel values to cycle */
  577. } ACT_CYCLE_HDR;
  578.  
  579. /* ACT_CYCLE flags values */
  580. /* NOTE: ACTIVE isn't currently checked. It's assumed to be active or
  581.  *       else it shouldn't have been created by anim reader. */
  582. #define ACT_CYCLE_ACTIVE  0x01
  583. #define ACT_CYCLE_REVERSE 0x02
  584. #define ACT_CYCLE_STARTED 0x80000000
  585.  
  586. extern void TheEnd();
  587. extern void TheEnd1();
  588. extern void ShowAnimation();
  589. extern void ShowAction();
  590. extern void Cycle_It();
  591. extern ULONG X11_Get_True_Color();
  592. extern ULONG X11_Get_Line_Size();
  593.  
  594.  
  595. /* AUDIO STUFF */
  596.  
  597. #define XA_AUDIO_STOPPED 0
  598. #define XA_AUDIO_STARTED 1
  599.  
  600. #define XA_AUDIO_OK   0
  601. #define XA_AUDIO_UNK  1
  602. #define XA_AUDIO_NONE 2
  603. #define XA_AUDIO_ERR  3
  604.  
  605. #define XA_AUDIO_MAXVOL  255
  606.  
  607. extern ULONG xa_audio_enable;
  608.  
  609.  
  610. /* 
  611.  * Useful Macros 
  612.  */
  613.  
  614. #define CMAP_GET_GRAY(r,g,b,scale) \
  615. ( ((scale)*((r)*11+(g)*16+(b)*5) ) >> xa_gray_shift)
  616.  
  617. #define CMAP_GET_332(r,g,b,scale) ( \
  618. ( (((r)*(scale)) & xa_r_mask) >> xa_r_shift) | \
  619. ( (((g)*(scale)) & xa_g_mask) >> xa_g_shift) | \
  620. ( (((b)*(scale)) & xa_b_mask) >> xa_b_shift) )
  621.  
  622. #define X11_Get_Bitmap_Width(x) \
  623.   ( ((x + x11_bitmap_unit - 1)/x11_bitmap_unit) * x11_bitmap_unit )
  624.  
  625. #define X11_Make_Pixel(p)  (x11_cmap_type == 0)?(p): \
  626.         ( (((p)<<24)|((p)<<16)|((p)<<8)|(p)) & x11_depth_mask )
  627.  
  628. #define XA_PIC_SIZE(p) ( (xa_use_depth_flag==TRUE)?((p) * x11_bytes_pixel): \
  629.         (p) )
  630.  
  631. #define XA_GET_TIME(t) ( (xa_jiffy_flag)?(xa_jiffy_flag):(t) )
  632.  
  633. #define XA_MEMSET(p,d,size) \
  634. { if (x11_bytes_pixel==4) { ULONG _sz=(size); \
  635.     ULONG *_lp=(ULONG *)p; while(_sz--) *_lp++ = (ULONG)(d); } \
  636.   else if (x11_bytes_pixel==2) { ULONG _sz=(size); \
  637.     USHORT *_sp=(USHORT *)p; while(_sz--) *_sp++ = (USHORT)(d); } \
  638.   else { memset(p,d,size); } \
  639. }
  640.  
  641. #define XA_REALLOC(p,cur_size,new_size) { if (new_size > cur_size) \
  642. { char *_tmp; \
  643.   if (p == 0) _tmp=(char *)malloc(new_size); \
  644.   else _tmp=(char *)realloc(p,new_size); \
  645.   if (_tmp == 0) TheEnd1("XA_Realloc: malloc err"); \
  646.   p = _tmp; cur_size = new_size; } \
  647.  
  648. #define FREE(_p,_q) free(_p)
  649. /* For Debug
  650. #define FREE(_p,_q) { fprintf(stderr,"FREE %lx %lx\n",_p,_q); free(_p); }
  651. */
  652.  
  653. #if !MAIN
  654. extern int xa_init();
  655. #endif
  656. extern XA_ANIM_HDR *Get_Anim_Hdr();
  657. extern XA_ANIM_HDR *Return_Anim_Hdr();
  658. extern LONG Determine_Anim_Type();
  659. extern ULONG IFF_Read_File();
  660. /*
  661. void IFF_Buffer_Action();
  662. void IFF_Init_DLTA_HDR();
  663. void IFF_Update_DLTA_HDR();
  664. void IFF_Buffer_HAM6();
  665. void IFF_Buffer_HAM8();
  666. */
  667. extern ULONG GIF_Read_Anim();
  668. extern ULONG TXT_Read_File();
  669. extern ULONG Fli_Read_File();
  670. extern ULONG DL_Read_File();
  671. extern ULONG PFX_Read_File();
  672. extern ULONG SET_Read_File();
  673. extern ULONG RLE_Read_File();
  674. extern ULONG AVI_Read_File();
  675. extern ULONG QT_Read_File();
  676. extern void XA_Read_Delta();
  677.  
  678. extern void Step_File_Next();
  679. extern void Step_File_Prev();
  680. extern void Step_Frame_Next();
  681. extern void Step_Frame_Prev();
  682.  
  683. /*
  684.  * Global variables to keep track of current width, height, num of colors and
  685.  * number of bit planes respectively. 
  686.  *
  687.  * the max_ variable are used for worst case allocation. Are useful for Anims
  688.  * that have multiple image sizes.
  689.  *
  690.  * image_size and max_image_size are imagex * imagey, etc.
  691.  */
  692. extern ULONG xa_image_size;
  693. extern ULONG xa_max_image_size;
  694. extern ULONG xa_imagex,xa_max_imagex;
  695. extern ULONG xa_imagey,xa_max_imagey;
  696. extern ULONG xa_imaged;
  697.  
  698. extern XA_ANIM_HDR *cur_file;
  699. extern XA_ANIM_HDR *first_file;
  700. extern LONG cur_floop,cur_frame;
  701. extern LONG xa_anim_flags;
  702.  
  703. int xa_fd;        /* Used if anim is being read from a file */
  704. char *xa_codec_buf;
  705.  
  706.